// 双向链表：通过给Node类添加一个previous属性，让其指向前驱节点的链接
// 节点类
function Node (element) {
    this.element = element  //当前节点的元素
    this.next = null  //指针，指向下一个节点
    this.previous = null //指向上一个节点 前驱
}
//双向链表的插入
function insert (newElement, item) {
    var newNode = new Node( newElement );
    var currNode = this.find(item);
    newNode.next = currNode.next;
    newNode.previous = currNode;
    currNode.next = newNode;
}
//链表类
function LList () {
    //创建头节点
    this.head=new Node('head')
    this.find = find;
    // this.findLast = findLast;
    this.insert = insert;
    this.remove = remove;
    this.display = display;
}
//双向链表的查找
function find(item){
    var currNode=this.head //从头节点开始遍历
    //遍历链表查找所指定的数据
    while(currNode.element!==item){
        currNode=currNode.next
    }
    return currNode
}
//双向链表的删除
function remove(item){
    var currNode=this.find(item)
    if(!(currNode.next==null)){
        currNode.previous.next=currNode.next //将所要删除的节点的上一个节点的指针（后继）指向，所删除节点的下一个节点（后继）
        currNode.next.previous=currNode.previous //设置所删除节点的后继，指向待删除节点的前驱
    }
}
//打印链表
function display(){
    //从头节点开始遍历
    var currNode=this.head
    while(currNode.next!==null){
        console.log(currNode.next.element);
        //不断的将当前指针指向 下一个节点
        currNode=currNode.next
    }
}
var fruits=new LList()
fruits.insert('小黑', 'head')
fruits.insert('小白', '小黑')
fruits.insert('小紫', '小白')
fruits.insert('小蓝', '小紫')
console.log(fruits.display());
console.log(fruits.find('小黑'));
console.log(fruits.find('小白'));